package com.yssoft.service.traceability;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.yssoft.entity.traceability.TTraceProcess;
import com.yssoft.entity.traceability.TTraceQuota;
import com.yssoft.mapper.traceability.TTraceProcessMapper;
import com.yssoft.mapper.traceability.TTraceQuotaMapper;
import com.yssoft.shiro.MyRealm.ShiroUser;
import com.yssoft.utils.LayuiUtil;
import com.yssoft.utils.UserHelper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * @类名称: TraceProcessService
 * @类描述: 溯源流程管理Service
 * @作者: 洪丰
 * @创建时间:2018年5月23日 下午4:31:46
 */
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
@Service
public class TraceProcessService
{
	@Autowired
	protected TTraceProcessMapper traceProcessMapper;
	@Autowired
	protected TTraceQuotaMapper traceQuotaMapper;
	
	
	/**
	 * @方法名称: queryProductById
	 * @功能描述: 获取唯一溯源过程
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午5:25:23
	 * @param id
	 * @return TProducts
	 */
	public TTraceProcess queryProcessById(Integer id){
		return traceProcessMapper.selectByPrimaryKey(id);
	}
	
	/**
	 * @方法名称: queryPage
	 * @功能描述: 分页查询列表数据
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午5:26:12
	 * @param pageNumber
	 * @param pageSize
	 * @param traceProcessName
	 * @return JSONObject
	 */
	public JSONObject queryPage(int pageNumber, int pageSize, String traceProcessName) {
        //获取当前登陆账号信息
        Integer entId =UserHelper.getCurrentCompanyId();//企业id
        PageHelper.startPage(pageNumber,pageSize);//下面第一个查询结果进行分页
        HashMap<String,Object> param = new HashMap<>();
        param.put("entId",entId);
        if(!"".equals(traceProcessName)){
        	param.put("traceProcessName",traceProcessName);
        }
        List<Map<String,Object>> traceProcessList = traceProcessMapper.selectTraceProcessPage(param);
        
		int count = traceProcessMapper.selectProcessCount(param);
		
        JSONObject jsonObject =LayuiUtil.getJSONObjectByMap(traceProcessList,count,"","");
        return jsonObject;
    }
	
	/**
	 * @方法名称: addAcc
	 * @功能描述: 新增溯源过程
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午5:28:57
	 * @param entity void
	 */
	public void addAcc(TTraceProcess entity) {
		
		// 取得当前登录人
		ShiroUser user = UserHelper.getCurrentUser();
		entity.setCreatorId(user.getId());
		entity.setCreatorName(user.getPersonName());
		entity.setCreateTime(new Date());
		entity.setDeleteFlag("0");
		entity.settEId(user.getEntId());
		entity.setDeptId(user.getDeptId());
		entity.setDeptName(user.getDeptName());
		
		traceProcessMapper.insert(entity);
	}
	
	/**
	 * @方法名称: editAcc
	 * @功能描述: 修改溯源过程
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午6:28:37
	 * @param entity void
	 */
	public void editAcc(TTraceProcess entity) {
		traceProcessMapper.updateByPrimaryKeySelective(entity);
	}
	
	/**
	 * @方法名称: delAccById
	 * @功能描述: 删除溯源过程
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午6:29:08
	 * @param id
	 * @return Integer
	 */
	public Integer delAccById(Integer id) {
		TTraceProcess entity = new TTraceProcess();
		entity.setId(id);
		entity.setDeleteFlag("1");
		int count = traceProcessMapper.updateByPrimaryKeySelective(entity);
		
		TTraceQuota qEntity = new TTraceQuota();
		qEntity.settProcessId(entity.getId());
		qEntity.setDeleteFlag("0");
		List<TTraceQuota> tqList = traceQuotaMapper.select(qEntity);
		for(TTraceQuota tqEntity : tqList){
			tqEntity.setDeleteFlag("1");
			traceQuotaMapper.updateByPrimaryKeySelective(tqEntity);
		}
		
		return count;
	}
	
	/**
	 * @方法名称: findTraceQuotaList
	 * @功能描述: 根据过程id获取溯源指标列表
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午6:38:43
	 * @param traceProcessId
	 * @return List<TTraceQuota>
	 */
	public List<TTraceQuota> findTraceQuotaList(Integer traceProcessId) {
		TTraceQuota qEntity = new TTraceQuota();
		qEntity.settProcessId(traceProcessId);
		qEntity.setDeleteFlag("0");
		return traceQuotaMapper.select(qEntity);
	}
	
	/**
	 * @方法名称: editTraceQuota
	 * @功能描述: 编辑溯源指标
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午6:44:55
	 * @param entity void
	 */
	public void editTraceQuota(TTraceProcess entity) {
		ShiroUser user = UserHelper.getCurrentUser();
		for(TTraceQuota tqEntity : entity.getTraceQuotaList()){
			if(null != tqEntity.getId()){
				traceQuotaMapper.updateByPrimaryKeySelective(tqEntity);
			}else{
				if(null != tqEntity.getName() && !"".equals(tqEntity.getName())){
					tqEntity.setCreatorId(user.getId());
					tqEntity.setCreatorName(user.getPersonName());
					tqEntity.setCreateTime(new Date());
					tqEntity.setDeleteFlag("0");
					tqEntity.settEId(user.getEntId());
					tqEntity.setDeptId(user.getDeptId());
					tqEntity.setDeptName(user.getDeptName());
					
					tqEntity.settProcessId(entity.getId());
					traceQuotaMapper.insert(tqEntity);
				}
			}
		}
	}
	
	/**
	 * @方法名称: delQuotaById
	 * @功能描述: 删除溯源指标
	 * @作者: 洪丰
	 * @创建时间:2018年5月23日 下午6:45:50
	 * @param id
	 * @return Integer
	 */
	public Integer delQuotaById(Integer id) {
		TTraceQuota entity = new TTraceQuota();
		entity.setId(id);
		entity.setDeleteFlag("1");
		return traceQuotaMapper.updateByPrimaryKeySelective(entity);
	}
}
